package com.xmkj.winmoney;

import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.StrictMode;
import android.support.multidex.MultiDex;
import android.text.TextUtils;
import android.util.DisplayMetrics;

import com.common.utils.ContextUtils;
import com.common.widget.loadingView.LoadingLayout;
import com.common.widget.toast.ToastManager;
import com.xmkj.winmoney.lisener.GlidePauseOnScrollListener;
import com.xmkj.winmoney.utils.GlideImageLoader;

import java.io.IOException;
import java.util.Locale;

import cn.finalteam.galleryfinal.CoreConfig;
import cn.finalteam.galleryfinal.FunctionConfig;
import cn.finalteam.galleryfinal.GalleryFinal;
import cn.finalteam.galleryfinal.ThemeConfig;
import cn.jpush.android.api.JPushInterface;


/*******************************
 * MainApplication
 * @author syc
 * created at 2017/4/13 上午 10:38
 ********************************/
public class MainApplication extends ContextUtils {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        initApp();
//        initWangYi();

//        OberserverLoginStatus();
    }
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }




    private void enableAVChat() {
//        registerAVChatIncomingCallObserver(true);
    }
/*    private void initWangYi() {
        // SDK初始化（启动后台服务，若已经存在用户登录信息， SDK 将完成自动登录）
        NIMClient.init(this, loginInfo(), options());
        AVChatProfile.getInstance().setAVChatting(false);
        if (NIMUtil.isMainProcess(this)) {
            // 注意：以下操作必须在主进程中进行
            // 1、UI相关初始化操作
            // 2、相关Service调用
            NimUIKit.init(this);
            if(EmptyUtils.isNotEmpty(SPUtils.getShareString(Constans.WANGYI_ACCOUNT))){
                NimUIKit.setAccount(SPUtils.getShareString(Constans.WANGYI_ACCOUNT));
//                NimUIKit.startP2PSession(context,SPUtils.getShareString(Constans.WANGYI_ACCOUNT));
            }
//            SessionHelper.init();
            // 在线状态定制初始化。
            NimUIKit.setOnlineStateContentProvider(new OnlineStateContentProvider() {
                @Override
                public String getSimpleDisplay(String account) {
                    return SPUtils.getShareString(Constans.WANGYI_ACCOUNT);
                }

                @Override
                public String getDetailDisplay(String account) {
                    return SPUtils.getShareString(Constans.WANGYI_ACCOUNT);
                }
            });
//            SessionHelper.init();
            NimUIKit.setSessionListener(new SessionEventListener() {
                @Override
                public void onAvatarClicked(Context context, IMMessage message) {

                }

                @Override
                public void onAvatarLongClicked(Context context, IMMessage message) {

                }
            });
            // 云信sdk相关业务初始化
//            NimUIKit.setOnlineStateContentProvider(new DemoOnlineStateContentProvider());
        }
        enableAVChat();
    }*/




/*    private static Observer<AVChatData> inComingCallObserver = new Observer<AVChatData>() {
        @Override
        public void onEvent(final AVChatData data) {
            String extra = data.getExtra();
            Log.e("Extra", "Extra Message->" + extra);
            if (*//*PhoneCallStateObserver.getInstance().getPhoneCallState() != PhoneCallStateObserver.PhoneCallStateEnum.IDLE
                    ||*//* AVChatProfile.getInstance().isAVChatting()
              *//*      || TeamAVChatProfile.sharedInstance().isTeamAVChatting()*//*
                    || AVChatManager.getInstance().getCurrentChatId() != 0) {
                AVChatManager.getInstance().sendControlCommand(data.getChatId(), AVChatControlCommand.BUSY, null);
                return;
            }
            // 有网络来电打开AVChatActivity
            AVChatProfile.getInstance().setAVChatting(true);
//            AVChatProfile.getInstance().launchActivity(data, userInfoProvider.getUserDisplayName(data.getAccount()), AVChatActivity.FROM_BROADCASTRECEIVER);
            Intent intent = new Intent(context, AVChatReceiveSideActivity.class);
            intent.putExtra(AVChatReceiveSideActivity.AVCHATDATA,data);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    };
    private SDKOptions options() {
        SDKOptions options = new SDKOptions();

        // 如果将新消息通知提醒托管给 SDK 完成，需要添加以下配置。否则无需设置。
        StatusBarNotificationConfig config = new StatusBarNotificationConfig();
        config.notificationEntrance = MainActivity.class; // 点击通知栏跳转到该Activity
        config.notificationSmallIconId = R.mipmap.icon;
        // 呼吸灯配置
        config.ledARGB = Color.GREEN;
        config.ledOnMs = 1000;
        config.ledOffMs = 1500;
        // 通知铃声的uri字符串
        config.notificationSound = "android.resource://com.netease.nim.demo/raw/msg";
        options.statusBarNotificationConfig = config;

        // 配置保存图片，文件，log 等数据的目录
        // 如果 options 中没有设置这个值，SDK 会使用采用默认路径作为 SDK 的数据目录。
        // 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。
//        String sdkPath = getAppCacheDir(getApplicationContext()) + "/nim"; // 可以不设置，那么将采用默认路径
        // 如果第三方 APP 需要缓存清理功能， 清理这个目录下面个子目录的内容即可。
//        options.sdkStorageRootPath = sdkPath;

        // 配置是否需要预下载附件缩略图，默认为 true
        options.preloadAttach = true;

        // 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小
        // 该值一般应根据屏幕尺寸来确定， 默认值为 Screen.width / 2
//        options.thumbnailSize = Screen.width/ 2;

        // 用户资料提供者, 目前主要用于提供用户资料，用于新消息通知栏中显示消息来源的头像和昵称
        options.userInfoProvider = new UserInfoProvider() {
            @Override
            public UserInfo getUserInfo(String account) {
                return null;
            }


            @Override
            public String getDisplayNameForMessageNotifier(String account, String sessionId,
                                                           SessionTypeEnum sessionType) {
                return null;
            }

            @Override
            public Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionType, String sessionId) {
                return null;
            }
        };
        return options;
    }

    private LoginInfo loginInfo() {
        // 从本地读取上次登录成功时保存的用户登录信息
        String account = SPUtils.getShareString(Constans.WY_ACCID);
        String token = SPUtils.getShareString(Constans.WY_TOKEN);
        System.out.println("accoutapp"+account);
        System.out.println("tokenapp"+token);
        if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) {
//            DemoCache.setAccount(account.toLowerCase());
            System.out.println("tokenapp"+"success");
            return new LoginInfo(account, token);
        } else {
            return null;
        }
    }*/

    private void initApp() {
        JPushInterface.init(this);            // 初始化 JPush
        JPushInterface.setDebugMode(true);
//        String registrationID = JPushInterface.getRegistrationID(this);
        ToastManager.init(getApplicationContext());
        initLoadingView();
        initGalleryFinal();
//        initDataCenter();
//        initThreeSDK();
//        initGalleryFinal();
    }

    private void initGalleryFinal() {
        //设置主题
        ThemeConfig theme = ThemeConfig.CYAN;
        //   ThemeConfig theme = new ThemeConfig.Builder()
        //    .build();
        //配置功能
        FunctionConfig functionConfig = new FunctionConfig.Builder()
                .setEnableCamera(true)
                .setEnableEdit(true)
                .setEnableCrop(true)
                .setEnableRotate(true)
                .setCropSquare(true)
                .setEnablePreview(true)
                .build();
        CoreConfig coreConfig = new CoreConfig.Builder(this, new GlideImageLoader(), theme)
                .setFunctionConfig(functionConfig)
                .setPauseOnScrollListener(new GlidePauseOnScrollListener(false, true))
                .build();
        GalleryFinal.init(coreConfig);
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
        builder.detectFileUriExposure();
    }


//
//    private void initGalleryFinal() {
//        //设置主题
//        ThemeConfig theme = ThemeConfig.CYAN;
//        //   ThemeConfig theme = new ThemeConfig.Builder()
//        //    .build();
//        //配置功能
//        FunctionConfig functionConfig = new FunctionConfig.Builder()
//                .setEnableCamera(true)
//                .setEnableEdit(true)
//                .setEnableCrop(true)
//                .setEnableRotate(true)
//                .setCropSquare(true)
//                .setEnablePreview(true)
//                .build();
//        CoreConfig coreConfig = new CoreConfig.Builder(this, new GlideImageLoader(), theme)
//                .setFunctionConfig(functionConfig)
//                .setPauseOnScrollListener(new GlidePauseOnScrollListener(false, true))
//                .build();
//        GalleryFinal.init(coreConfig);
//    }

//    // 初始化第三方SDK
//    private void initThreeSDK() {
//        // 初始化环信即时通讯
//        EaseUI.getInstance().init(this);
//    }

    // 初始化本地数据存储
//    private void initDataCenter() {
//        if (EmptyUtils.isNull(DataCenter.getInstance())) {
//            DataCenter.initDataCenter();
//        }
//    }

    // 初始化页面预加载View
    private void initLoadingView() {
        LoadingLayout.getConfig()
                .setEmptyText("暂无数据")
                .setNoNetworkText("无网络连接，请检查您的网络···")
                .setErrorImage(R.mipmap.loadingview_error)
                .setEmptyImage(R.mipmap.loadingview_empty)
                .setNoNetworkImage(R.mipmap.loadingview_error)
                .setAllTipTextColor(R.color.grey)
                .setAllTipTextSize(14)
                .setReloadButtonText("点我重试")
                .setReloadButtonTextSize(14)
                .setReloadButtonTextColor(R.color.grey)
                .setReloadButtonWidthAndHeight(150, 40)
                .setAllPageBackgroundColor(R.color.view_background_color);
//        .setLoadingPageLayout(R.layout.define_loading_page)
    }

    private void getLanguage(boolean is_turkey) {

        Resources resources = getResources();

        Configuration config = resources.getConfiguration();

        DisplayMetrics dm = resources.getDisplayMetrics();

        if (is_turkey) {
            Locale locale2 = new Locale("tr", "TR");
            config.locale = locale2; // 土耳其

        } else {
            config.locale = Locale.getDefault();
        }

        resources.updateConfiguration(config, dm);

    }

    /**
     * 配置 APP 保存图片/语音/文件/log等数据的目录
     * 这里示例用SD卡的应用扩展存储目录
     */
    static String getAppCacheDir(Context context) {
        String storageRootPath = null;
        try {
            // SD卡应用扩展存储区(APP卸载后，该目录下被清除，用户也可以在设置界面中手动清除)，请根据APP对数据缓存的重要性及生命周期来决定是否采用此缓存目录.
            // 该存储区在API 19以上不需要写权限，即可配置 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
            if (context.getExternalCacheDir() != null) {
                storageRootPath = context.getExternalCacheDir().getCanonicalPath();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (TextUtils.isEmpty(storageRootPath)) {
            // SD卡应用公共存储区(APP卸载后，该目录不会被清除，下载安装APP后，缓存数据依然可以被加载。SDK默认使用此目录)，该存储区域需要写权限!
//            storageRootPath = Environment.getExternalStorageDirectory() + "/" + DemoCache.getContext().getPackageName();
        }

        return storageRootPath;
    }


}
